package com.xbongbong.i18n.util;

import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
 * 国际化工具类, 该类为了方便使用提供静态方法调用
 * @author kaka
 * @version v1.0
 * @date 2019/12/24 14:33
 * @since v1.0
 */
@Component
public class I18nMessageUtil {

    @Resource
    private LocaleMessage localeMessage;

    private static LocaleMessage staticLocaleMessage;

    @PostConstruct
    public void init() {
        I18nMessageUtil.staticLocaleMessage = localeMessage;
    }

    /**
     * 获取当前选择的地区的语言消息字符串
     * @param code 对应文本配置的key
     * @return 对应地区的语言消息字符串
     */
    public static String getMessage(String code) {
        if(StringUtils.isEmpty(code)) {
            return "";
        }
        String msg;
        try {
            msg = staticLocaleMessage.getMessage(code);
        } catch (Exception e) {
            return code;
        }
        if (StringUtils.isEmpty(msg)) {
            msg = code;
        }
        return msg;
    }

    /**
     * 获取指定地区的语言消息字符串
     * @param code 对应文本配置的key
     * @param locale 指定地区的语言
     * @return 对应地区的语言消息字符串
     */
    public static String getMessage(String code, Locale locale) {
        if(StringUtils.isEmpty(code)) {
            return "";
        }
        String msg;
        try {
            msg = staticLocaleMessage.getMessage(code, locale);
        } catch (Exception e) {
            return code;
        }
        if (StringUtils.isEmpty(msg)) {
            msg = code;
        }
        return msg;
    }

    /**
     * 获取当前选择的地区的语言消息字符串数组
     * @param codes 对应文本配置的key列表
     * @return 对应地区的语言消息字符串数组
     */
    public static List<String> getMessages(List<String> codes) {
        List<String> msgs = new ArrayList<>();
        if (codes == null || codes.isEmpty()) {
            return msgs;
        }
        for (String code : codes) {
            String msg;
            try {
                msg = staticLocaleMessage.getMessage(code);
            } catch (Exception e) {
                msg = code;
            }
            if (StringUtils.isEmpty(msg)) {
                msg = code;
            }
            msgs.add(msg);
        }
        return msgs;
    }
}
